class Student(object):
    """ this is description id student"""

    # school_name 变量是一个类变量，它的值将在这个类的所有实例之间共享。你可以在内部类或外部类使用 Student.school_name 访问。
    school_name = "朝阳区实验小学"

    # 这是构造方法,__init__ 开始
    # 类的构造函数或初始化方法，当创建了这个类的实例时就会调用该方法
    # self 代表类的实例，self 在定义类的方法时是必须有的，虽然在调用时不必传入相应的参数。
    def __init__(self, name, age, score):
        self.name = name
        self.age = age
        self.score = score

    # 如果要让内部属性不被外部访问，可以把属性的名称前加上两个下划线__，在Python中，实例的变量名如果以__开头，
    # 就变成了一个私有变量（private），只有内部可以访问，外部不能访问 查看 bench.py
    # def __init__(self, name, age, score):
    #     self.__name = name
    #     self.__age = age
    #     self.__score = score

    # 如果两个 构造方法 :TypeError: __init__() takes 3 positional arguments but 4 were given
    # def __init__(self, address, telephone):
    #     self.address = address
    #     self.telephone = telephone

    # 这是类中定义的普通方法,要定义一个方法，除了第一个参数是self外，其他和普通函数一样
    # 要调用一个方法，只需要在实例变量上直接调用，除了self不用传递,其他参数正常传入
    def print_name_age_score(self):
        # TypeError: not enough arguments for format string
        # print("student info ", "%s:%s:%s" % self.name, self.age, self.score)
        print("student info ", "%s : %s : %s" % (self.name, self.age, self.score))
        # print("student info ", "name =" % self.name, "age =" + self.age, "score = " + self.score)

    def print_score(self):
        if self.score < 0:
            raise Exception("输入的的分数是 %s" % self.score, "分数不能小于 0")  # 异常提示有参数
        if self.score >= 90:
            print("这次分数是%s" % self.score, "恭喜你得A")
        elif self.score >= 60 & self.score < 89:
            print("这次分数是%s" % self.score, "恭喜你得B")
        elif self.score < 60:
            print("这次分数是%s" % self.score, "考的不好挖,得C")

    def print_class_info(self):
        print("this is method of student")
